#!/bin/bash
# Запустить этот скрипт на разных архитектурах
# и сделать diff hashes.csv, чтобы найти проекты,
# в которых SRPM на разных архитектурах содержат разные файлы,
# а значит один и тот же SRPM не подойдет для пересборки
# на разных архитектурах.
# dnf install git-core rpm-build abf

set -e
set -a

dir0="$PWD"
NPROC="${NPROC:-$(nproc)}"

mkdir -p gits
mkdir -p results/srpms
cd gits

F="$(mktemp)"
trap 'rm -f "$F"' EXIT

_w(){
	flock "$F" bash -c "echo $1 >> $2"
}

_u(){
	line="$1"
	rm -fr "$line"
	# GIT_TERMINAL_PROMPT=0 отключает запрос пароля для закрытых репозиториев (*_mcst)
	if ! GIT_TERMINAL_PROMPT=0 git clone --depth=1 -b rosa2021.15 https://abf.io/import/"$line".git; then
		_w "$line" "$dir0"/results/clone-errors.list
		return
	fi
	test -d "$line"
	pushd "$line"
		if test -f .abf.yml && ! abf fetch; then
			_w "$line" "$dir0"/results/abf-fetch-errors.list
			return
		fi
		if ! rpmbuild -bs --define "_build_pkgcheck_srpm %{nil}" --define "_sourcedir $PWD" --define "_srcrpmdir $PWD" *.spec; then
			_w "$line" "$dir0"/results/rpmbuild-bs-errors.list
			return
		fi
		local f
		f="$(ls *.src.rpm)"
		local hash
		hash="$(rpm -qp "$f" --dump | awk '{print $4}' | md5sum | awk '{print $1}')"
		_w "$f $hash" "$dir0"/results/hashes.csv
		mv "$f" "$dir0"/results/srpms
		_w "$line" "$dir0"/results/ok.list
	popd
	rm -fr "$line"
}

cat "$dir0"/spisok | sort | xargs -I'{}' -P"$NPROC" bash -x -c "_u {}"
